// #include "main.h"
// #include "stm32G4xx_hal.h"
// #include "stm32g4xx_hal_exti.h"
// #include "boot.h"

// static void JumpToApp(void)
// {
//         uint32_t i = 0;
//         void (*SysMemBootJump)(void);        /* 声明一个函数指针 */
//         __IO uint32_t BootAddr = 0x08050000; /* STM32的系统BootLoader地址 */

//         /* 设置所有时钟到默认状态，使用HSI时钟 */
//         HAL_RCC_DeInit();

//         /* 关闭全局中断 */
//         DISABLE_INT();

//         /* 关闭滴答定时器，复位到默认值 */
//         SysTick->CTRL = 0;
//         SysTick->LOAD = 0;
//         SysTick->VAL = 0;

//         /* 关闭所有中断，清除所有中断挂起标志 */
//         for (i = 0; i < 8; i++)
//         {
//                 NVIC->ICER[i] = 0xFFFFFFFF;
//                 NVIC->ICPR[i] = 0xFFFFFFFF;
//         }

//         /* 使能全局中断 */
//         ENABLE_INT();

//         /* 跳转到系统BootLoader，首地址是MSP，地址+4是复位中断服务程序地址 */
//         SysMemBootJump = (void (*)(void))(*((uint32_t *)(BootAddr + 4)));

//         /* 设置主堆栈指针 */
//         __set_MSP(*(uint32_t *)BootAddr);

//         /* 在RTOS工程，这条语句很重要，设置为特权级模式，使用MSP指针 */
//         __set_CONTROL(0);

//         /* 跳转到系统BootLoader */
//         SysMemBootJump();

//         /* 跳转成功的话，不会执行到这里，用户可以在这里添加代码 */
//         while (1)
//         {
//         }
// }

// __asm void MSR_SP(uint32_t *BootAddr)
// {
//         MSR MSP, r0
//         BX r14
// }

// void LOAD_APP(uint32_t *addr)
// {

//         if ((*(uint32_t *))addr >= 0x20000000 && (*(uint32_t *)(addr) <= 0x20000000))
//         {
//                 MSR_SP(addr);
//                 load_A = (load_a) * (*(uint32_t *)(addr + 4));
//                 load_A();
//         }
// }

// void Boot_clean(void)
// {
//         // deinit
// }
